import { defineStore } from 'pinia'
import { getUserInfoApi, loginByCodeApi, logoutApi } from '../../api/user'

const state = () => ({
    token: '',
    userInfo: {},
    userRole: 'candidate' // 默认是求职者(candidate)，可选值：candidate(求职者)、recruiter(招聘者)
})

const actions = {
    setToken(token) {
        this.token = token
    },
    setUserInfo(userInfo) {
        this.userInfo = userInfo
    },
    setUserRole(role) {
        this.userRole = role
        // 同时保存到本地存储，确保状态持久化
        uni.setStorageSync('currentRole', role)
    },
    
    // 退出登录action函数
    logoutAction() {
        return new Promise((resolve, reject) => {
            try {
                this.token = ''
                this.userInfo = {}
                
                // 触发自定义事件，让其他页面知道用户有没有退出登录
                uni.$emit('logoutSuccess')
                resolve()
            } catch (e) {
                reject(e)
            }
        })
    },
    
    async logoutRemoteAction() {
        await logoutApi()
        this.logoutAction()
    },
    
    loginByCodeAction({ phone, code }) {
        return new Promise(async (resolve, reject) => {
            try {
                const resp = await loginByCodeApi({ phone, code })
                this.token = resp.accessToken
                // 把当前Promise实例设置为成功态
                resolve()
            } catch (e) {
                // 把当前Promise实例设置为失败态
                reject(e)
            }
        })
    },
    
    // 获取用户信息action函数
    getUserInfoAction() {
        return new Promise(async (resolve, reject) => {
            try {
                // 调用接口（发请求），并完成赋值
                this.userInfo = await getUserInfoApi()
                console.log("获取到的用户信息:", this.userInfo);
                
                // 检查是否有手动设置的角色（从本地存储获取）
                const manualRole = uni.getStorageSync('currentRole');
                
                // 如果有手动设置的角色，优先使用手动设置的角色
                if (manualRole && (manualRole === 'candidate' || manualRole === 'company')) {
                    this.userRole = manualRole;
                } else {
                    // 没有手动设置时，根据用户信息设置角色
                    if (this.userInfo.role !== undefined && this.userInfo.role !== null) {
                        // 将数字角色映射到字符串角色
                        if (this.userInfo.role === 1 || this.userInfo.role === '1') {
                            this.userRole = 'candidate'; // 求职者
                        } else if (this.userInfo.role === 2 || this.userInfo.role === '2') {
                            this.userRole = 'company'; // 招聘者
                        } else {
                            this.userRole = 'candidate'; // 默认求职者
                        }
                    }
                }
                
                resolve()
            } catch (e) {
                console.error('getUserInfoAction 错误:', e);
                reject(e)
            }
        })
    },
    
    // 获取当前用户ID的辅助函数
    getCurrentUserId() {
        console.log("获取当前用户ID - userInfo:", this.userInfo);
        if (this.userInfo && this.userInfo.id) {
            return this.userInfo.id;
        }
        return null;
    },
    
    // 初始化用户信息的函数
    async initUserInfo() {
        console.log("初始化用户信息");
        try {
            // 如果userInfo为空，尝试从本地存储获取
            if (!this.userInfo || Object.keys(this.userInfo).length === 0) {
                const storedUserInfo = uni.getStorageSync('userInfo');
                console.log("从本地存储获取的用户信息:", storedUserInfo);
                if (storedUserInfo) {
                    this.userInfo = storedUserInfo;
                }
            }
            
            // 如果仍然没有用户信息，调用API获取
            if (!this.userInfo || Object.keys(this.userInfo).length === 0) {
                await this.getUserInfoAction();
            }
            
            console.log("初始化后的用户信息:", this.userInfo);
            return this.userInfo;
        } catch (error) {
            console.error("初始化用户信息失败:", error);
        }
    }
}

export const useUserStore = defineStore('user', {
    state,
    actions,
    persist: true
})